home *** CD-ROM | disk | FTP | other *** search
- #ifdef COMMENT
- Diese Funktion erlaubt den Zugriff auf Environmentvariablen aus allen
- Programmen heraus. Unter Master existieren zwei Uebergabemechanismen:
- 1. Im Unix-Standardformat:
-
- als Blockdiagramm:
-
- +---------+-+-----+--+---------+-+-----+--+ +-----+--+--+
- |Variable1|=|Wert1|\0|Variable2|=|Wert2|\0| ... |Wertn|\0|\0|
- +---------+-+-----+--+---------+-+-----+--+ +-----+--+--+
-
- oder in C-Schreibweise:
-
- env = "var1=val1\0var2=val2\0 ... valn\0\0";
-
- 2. Im GEM-Format:
-
- als Blockdiagramm:
-
- +---------+-+--+-----+--+---------+-+--+-----+--+ +-----+--+--+
- |Variable1|=|\0|Wert1|\0|Variable2|=|\0|Wert2|\0| ... |Wertn|\0|\0|
- +---------+-+--+-----+--+---------+-+--+-----+--+ +-----+--+--+
-
- oder in C-Schreibweise:
-
- env = "var1=\0val1\0var2=\0val2\0 ... valn\0\0";
- #endif COMMENT
-
- #ifdef GEM_ENV
- # define equal(s1,s2,l) !strcmp(s1,s2)
- #else
- # define equal(s1,s2,l) !strncmp(s1,s2,l)
- #endif GEM_ENV
-
- #define MASTER_MAGIC 0x4D415354L
-
- #include <osbind.h>
-
- extern struct bp {
- long ptr[11];
- char **p_env;
- char filler[0x50];
- char cmdlin[0x80];
- } *_base; /* Name gilt in MMCC */
-
- char *getenv(str)
- char *str;
- {
- register char *tosenv, *teststr;
- register int len;
- long ssp;
- long **_shell_p = (long **) 0x4f6L;
- long *ptr;
- char *(*master)();
-
- ssp = Super(0L);
- ptr = (*_shell_p);
- Super(ssp);
- if(*(ptr-2) == MASTER_MAGIC) {
- master = (char *(*)) ++ptr;
- return((*master)(1L,str));
- }
- tosenv = *(_base->p_env); /* Environment-Zeiger */
- /* aus der Basepage */
-
- len = strlen(str) + 1; /* sichere den String */
- teststr = (char *) malloc(len+1);
- strcpy(teststr,str); /* Variable in teststr */
- strcat(teststr,"="); /* TOS braucht '=' */
-
- while(*tosenv) {
- if(equal(*tosenv,teststr,len)) {/* schon gefunden ? */
- register int lenv;
- tosenv += len; /* ueberspringe Namen */
- #ifdef GEM_ENV
- tosenv++; /* und das 0-Byte */
- #endif GEM_ENV
- lenv = strlen(*tosenv) + 1;
- free(teststr); /* String freigeben */
-
- teststr = (char *) malloc(lenv);
- strcpy(teststr,tosenv); /* Wert in teststr */
- return(teststr); /* und zurueckgeben */
- }
- tosenv += strlen(*tosenv)+1; /* ueberspringe Eintrag */
- }
- return((char *)0); /* nicht gefunden */
- }
-